TOP

SQL INSERT INTO SELECT

INSERT INTO SELECT Descripción

La instrucción SQL INSERT INTO SELECT copia datos de una tabla y los inserta en otra tabla.

El operador INSERT INTO SELECT requiere que los tipos de datos en las tablas de origen y de destino coincidan.


Los registros existentes en la tabla de destino permanecen y no se ven afectados por el proceso de copia.

INSERT INTO SELECT Sintaxis

Copia todas las columnas de una tabla a otra:

INSERT INTO table2
SELECT * 
FROM table1
WHERE condition

Copia solo algunas columnas de una tabla a otra:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition

Base de datos de demostración

En este tutorial usaremos la famosa base de datos de ejemplo "Northwind".

A continuación se muestra un ejemplo de la tabla "Customers" ("Clientes"):

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Y la muestra de la tabla "Suppliers" ("Proveedores"):

SupplierIDSupplierNameContactNameAddressCityPostalCodeCountryPhone
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonaEC1 4SDUK(171) 555-2222
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA(100) 555-4822
3Grandma Kelly's HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA(313) 555-5735
4Tokyo TradersYoshi Nagase9-8 Sekimai Musashino-shiTokyo100Japan(03) 3555-5011
5Cooperativa de Quesos 'Las Cabras'Antonio del Valle SaavedraCalle del Rosal 4Oviedo33007Spain(98) 598 76 54

INSERT INTO SELECT Ejemplos

La siguiente consulta SQL copia "Suppliers" ("Proveedores") en "Customers" ("Clientes") (las columnas que no se completan con datos contendrán NULL):

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country 
FROM Suppliers

Otra versión de la consulta SQL copia datos de la tabla "Proveedores" a "Clientes" (llena todas las columnas):

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country 
FROM Suppliers

La siguiente instrucción SQL copia solo los proveedores alemanes en la tabla Clientes:

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country 
FROM Suppliers
WHERE Country = 'Germany'